package com.zw.a.basic.a11.demo01_set;


import com.zw.a.basic.a11.pojo.Student;

//案例: 哈希值入门.
/*
    哈希值简介:
        概述:
            指的就是JDK根据对象的地址值, 或者字符串, 或者数字算出来的int类型的数值.
            大白话解释: 可以理解为哈希值就是对象的编号.
        Object类中的方法:
            public int hashCode();      获取该对象的哈希值.
    结论: 记忆:
        1. 实际开发中, 我们认为, 如果同一个类的两个对象, 各个属性都相同, 那么它们就是同一个对象.
           所以, 只要涉及到hashCode()方法了, 子类一般都会重写hashCode()方法, 采用属性值计算哈希值.
        2. 同一个对象(属性值相同)多次调用hashCode(), 返回的哈希值是一样的.
        3. 同一对象哈希值肯定相同, 不同对象哈希值一般不同.

            姓名    年龄            哈希值
            4       8               12
            6       6               12
            1       11              12

            //新算法, *31 然后运算.
            4*31      8               12
            6*31      6               12
            1*31      11              12
 */
public class Demo02 {
    public static void main(String[] args) {
        //1.定义学生类, 属性为姓名和年龄.
        //2.在测试类的main方法中, 创建两个学生对象, 分别获取它们的哈希值, 并打印.
        Student s1 = new Student("刘亦菲", 33);
        Student s2 = new Student("刘亦菲", 33);
        Student s3 = new Student("赵丽颖", 31);
        //3.测试: 重写Object#hashCode()方法, 实现不同对象的哈希值也是相同的.
        System.out.println("s1: " + s1.hashCode());
        System.out.println("s2: " + s2.hashCode());
        System.out.println("s3: " + s3.hashCode());

        //4.测试: 同一对象哈希值肯定相同, 不同对象哈希值一般不同.
        //重地和通话, 儿女和农丰
        System.out.println("重地abc".hashCode());
        System.out.println("通话abc".hashCode());
        System.out.println("-------------------------");
        System.out.println("儿女".hashCode());
        System.out.println("农丰".hashCode());


    }
}
